﻿using System;
using System.Collections.Generic;
using System.Text;

namespace daSyntaxAnalyser.SyntaxTree
{
    using daBase.Objects;

    /// <summary>
    /// Оператор while
    /// </summary>
    public class WhileStatementElement : StatementElement
    {
        private ExpressionElement condition;
        private StatementElement statement;

        /// <summary>
        /// Условное выражение оператора
        /// </summary>
        public ExpressionElement Condition { get { return condition; } set { condition = value; } }

        /// <summary>
        /// Оператор внутри цикла
        /// </summary>
        public StatementElement Statement { get { return statement; } set { statement = value; } }

        /// <summary>
        /// Конструктор
        /// </summary>
        /// <param name="StartInfo">информация о расположении элемента</param>
        /// <param name="Condition">условное выражение оператора</param>
        /// <param name="Statement">оператор внутри цикла</param>
        /// <param name="Comments">комментарии элемента</param>
        public WhileStatementElement(TokenInfo StartInfo, ExpressionElement Condition, StatementElement Statement, List<TokenInfo> Comments)
            : base(StartInfo, Comments)
        {
            condition = Condition;
            statement = Statement;
        }

        /// <summary>
        /// Вывод элемента как строки
        /// </summary>
        /// <returns>строковое представление элемента</returns>
        public override string ToString()
        {
            return string.Format("while {0} do {1}", condition, statement);
        }

        /// <summary>
        /// Внутренние элементы
        /// </summary>
        /// <returns>энумератор внутренних элементов</returns>
        protected override IEnumerator<ISyntaxTreeElement> CreateEnumerator()
        {
            yield return condition;
            if (statement != null)
                yield return statement;
        }
    }
}
